#include "includes.h"

#ifdef PRF_UART

uint8_t PrfRxSta=0;
union16_t PrfRegVal;
idata uart_t Uart;
idata prf_t Prf;

void main(void)
{
	PrfInit();
	LedInit();
	Prf.sta = PRF_RX;
	DeeRd(DEE_ADDR, &Prf.ch, 1);		//Read channel
	//if(Prf.ch>78)
		//Prf.ch = 78;
  Prf.ch = 0x30;
	UartInit(BRT_8M_9600);
	Timer0Init(250);								//250us
	EA = 1;
	while(1)
	{
		UartProc();
		PrfProc();
	}
}


void UartProc(void)
{
	uint8_t i;
	bit cmd_flag=0;
	
	if(Uart.rxsta==RXSTA_FIN)
	{
		if((Uart.rxbuf[0]==0xCC)&&(Uart.rxbuf[1]=0xCC))
		{
			if(Uart.rxbuf[2]==0xC0)
			{
				DeeRd(DEE_ADDR, &Uart.rxbuf[3], 1);
				Uart.rxbuf[4] = 0xAA;
				UartTxPtr(&Uart.rxbuf[0], 5);
				cmd_flag = 1;
			}
			else if(Uart.rxbuf[2]==0xC1)
			{
				Prf.ch = Uart.rxbuf[3];
				DeeWr(DEE_ADDR, &Prf.ch, 1);
				UartTxPtr(&Uart.rxbuf[0], Uart.rxlen);
				cmd_flag = 1;
			}
		}
		
		if(cmd_flag==0)
		{
			Prf.txbuf[0] = Uart.rxlen;
			for(i=0;i<Uart.rxlen;i++)
			{
				Prf.txbuf[i+1] = Uart.rxbuf[i];
			}
			PrfTxPtr(&Prf.txbuf[0], Prf.ch);
			LED1 = ~LED1;
		}
		Uart.rxsta = RXSTA_IDLE;
		Prf.sta = PRF_RX;
		PrfRxSta = 0;
	}
}

void PrfProc(void)
{
	if(Prf.sta==PRF_RX)
	{
		switch(PrfRxSta)
		{
			case 0:
				PrfSetModeCh(PRF_IDLE, Prf.ch);
				PrfClrTxRxPtr();
				PrfSetModeCh(PRF_RX, Prf.ch);
				PrfRxSta = 1;
				break;
			case 1:
				if(PRF_PKT==0)
				{
					PrfRdRegPtr(PRF_STATUS, &PrfRegVal.u8[0], 2);
					if((PrfRegVal.u16&PRF_STATUS_CRC_MASK)==PRF_STATUS_CRC_OK)
					{
						PrfRdRegPtr(PRF_FIFO_DAT, &Prf.rxbuf[0], 1);
						if(Prf.rxbuf[0]<PRF_RXBUF_SIZE)
						{
							PrfRdRegPtr(PRF_FIFO_DAT, &Prf.rxbuf[1], Prf.rxbuf[0]);
							UartTxPtr(&Prf.rxbuf[1], Prf.rxbuf[0]);
							LED0 = ~LED0;
						}
					}
					PrfRxSta = 0;
				}
				break;
			default:
				PrfRxSta = 0;
				break;
		}
	}
}


#endif	//PRF_UART
